package vista;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;
import java.awt.event.WindowStateListener;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.EventObject;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JPanel;

import javax.swing.WindowConstants;
import javax.swing.border.LineBorder;
import javax.swing.SwingUtilities;

import controlador.ControladorImpresora;


/**
* This code was edited or generated using CloudGarden's Jigloo
* SWT/Swing GUI Builder, which is free for non-commercial
* use. If Jigloo is being used commercially (ie, by a corporation,
* company or business for any purpose whatever) then you
* should purchase a license for each developer using Jigloo.
* Please visit www.cloudgarden.com for details.
* Use of Jigloo implies acceptance of these licensing terms.
* A COMMERCIAL LICENSE HAS NOT BEEN PURCHASED FOR
* THIS MACHINE, SO JIGLOO OR THIS CODE CANNOT BE USED
* LEGALLY FOR ANY CORPORATE OR COMMERCIAL PURPOSE.
*/
/**
 * Vista del formulario que permite capturar las opciones
 * de impresion
 * 
 * @author Elam Torres 
 * @version 1.0
 * @date 19/03/2012 
 */
@SuppressWarnings("serial")
public class frmImpresora extends javax.swing.JFrame {
	private static frmImpresora formulario = null;
	private JPanel pndatos;
	private JPanel pnmarco;
	/**
	 * Boton para exportar el documento de impresion segun 
	 * las opcines seleccionadas
	 * 
	 */
	private JButton btaceptar;
	/**
	 * Boton para limpiar pantalla
	 * 
	 */
	private JButton btcancelar;
	/**
	 * Lista que guarda las opciones de impresion como CheckBox
	 * 
	 */
	@SuppressWarnings("rawtypes")
	private List opciones;
	/**
	 * Controlador de la vista que se encarga de procesar los eventos 
	 * de la vista
	 */
	private ControladorImpresora controlador;

	/**
	* Auto-generated main method to display this JFrame
	*/
	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {
			public void run() {
				//frmImpresora inst = new frmImpresora(new ControladorImpresora());
//				inst.setLocationRelativeTo(null);
//				inst.setVisible(true);
			}
		});
	}
	/**
	 * Constructor de la vista que permite tomar las opciones 
	 * de impresion
	 * 
	 * @param controlador Controlador de la vista encargada de gestionar los eventos
	 */
	@SuppressWarnings("rawtypes")
	private frmImpresora(ControladorImpresora controlador) {
		super();
		this.controlador=controlador;
		this.opciones = new ArrayList();
		initGUI();
		AgregarEscuchadores();
	}
	
	public static frmImpresora getInstacia(ControladorImpresora controlador){
		if (formulario==null){
			formulario = new frmImpresora(controlador);
		}
		return formulario;
	}
	/**
	 * Metodo para inicializacion de todos los objetos contenidos dentro de la vista
	 */
	private void initGUI() {
		try {
			setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
			{
				pndatos = new JPanel();
				getContentPane().add(pndatos, BorderLayout.CENTER);
				pndatos.setLayout(null);
				pndatos.setPreferredSize(new java.awt.Dimension(400, 268));
				{
					pnmarco = new JPanel();
					pndatos.add(pnmarco);
					pnmarco.setBorder(new LineBorder(new java.awt.Color(0,0,0), 1, false));
					pnmarco.setBounds(10, 12, 370, 206);
				}
				{
					btaceptar = new JButton();
					pndatos.add(getBtaceptar());
					btaceptar.setText("Aceptar");
					btaceptar.setBounds(281, 230, 98, 22);
				}
				{
					btcancelar = new JButton();
					pndatos.add(getBtcancelar());
					btcancelar.setText("Cancelar");
					btcancelar.setBounds(175, 230, 98, 22);
				}
			}
			pack();
			setResizable(false);
			this.setSize(398, 289);
		} catch (Exception e) {
		    //add your error handling code here
			e.printStackTrace();
		}
	}
	
	/**
	 * @return Panal donde se encuentran todos los objetos de la vista
	 */
	public JPanel getPndatos() {
		return pndatos;
	}
	/**
	 * 
	 * @return Panel sobre el cual se encuentran las opciones de impresion
	 */
	public JPanel getPnmarco() {
		return pnmarco;
	}
	/**
	 * 
	 * @return boton acetpar
	 */
	public JButton getBtaceptar() {
		return btaceptar;
	}
	/**
	 * 
	 * @return boton cancelar
	 */
	public JButton getBtcancelar() {
		return btcancelar;
	}
	/**
	 * Metodo para agregar escuchadores a los objetos que lo necesiten en la
	 * vista
	 */
	public void AgregarEscuchadores(){
		getBtaceptar().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificarControlador(e);
			}
		});
		getBtcancelar().addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				notificarControlador(e);
			}
		});
		this.addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				setFormulario(null);
				getControlador().procesarEvento(e);
    		}
			@Override
			public void windowIconified(WindowEvent e) {
				getControlador().procesarEvento(e);
			}
		});
	}
	
	public ControladorImpresora getControlador() {
		return controlador;
	}

	protected void notificarControlador(EventObject e) {
		getControlador().procesarEvento(e);
	}
	private void setFormulario(frmImpresora formulario){
		this.formulario=formulario;
	}
	@SuppressWarnings({ "unchecked", "rawtypes" })
	public void crearOpciones(List opciones) {
		for (int i=0;i<opciones.size();i++){
			final JCheckBox opcion = new JCheckBox(opciones.get(i).toString());
			opcion.addActionListener(new ActionListener() {
				public void actionPerformed(ActionEvent arg0) {
					getControlador().procesarEvento(arg0);
				}
			});
			opcion.setBackground(this.getPnmarco().getBackground());
			this.opciones.add(opcion);
			getPnmarco().add(opcion);
		}
	}
	@SuppressWarnings("rawtypes")
	public List getOpciones() {
		return opciones;
	}
	public void cerrarPantalla() {
		formulario=null;
		dispose();
	}

}
